package com.glink.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.SilentResultBean;
import com.glink.manage.domain.SilentResultDetailBean;
import com.glink.manage.dto.silentresult.*;
import com.glink.manage.vo.silentresult.SilentResultAnalysisVO;
import com.glink.manage.vo.silentresult.SilentResultPageVO;
import com.glink.manage.vo.silentresult.SilentResultWarnPageVO;
import com.glink.manage.vo.view.AlarmInfoVO;

import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author  qiushaoshan
 * @since  2025-01-20
 */
public interface SilentResultService extends IService<SilentResultBean> {

    /**
     * 分页查询待处理违章
     * @param dto
     * @return
     */
    IPage<SilentResultPageVO> pageByPendingViolationHandling(SilentResultPageDTO dto) throws GeneralSimpleException;

    /**
     * 忽略违章
     * @param objIds 处理数据
     * @return 忽略状态
     */
    Boolean ignoreViolations(List<String> objIds);

    /**
     * 统计告警数
     */
    void countWebSocketReadWarn();
    /**
     * 处理违章
     * @param dto 处理违章信息
     * @return 处理状态
     */
    Boolean handleViolations(SilentResultHandleDTO dto) throws GeneralSimpleException;

    /**
     * 分页查询告警信息
     * @param dto 告警查询
     * @return 告警信息
     */
    IPage<SilentResultWarnPageVO> pageByWarn(SilentResultWarnPageDTO dto) throws GeneralSimpleException;

    /**
     * 根据创建时间查询待分析图片
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 待分析图片
     */
    List<SilentResultAnalysisVO> findToBeAnalyzedByCreateTimeBetween(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据创建时间查询待分析图片
     * @param time 时间
     * @return 待分析图片
     */
    List<SilentResultAnalysisVO> findAllToBeAnalyzedByCreateTimeLe(LocalDateTime time);

    /**
     * 已读消息
     * @param dto 已读告警ID
     * @return 已读状态
     */
    boolean readWarn(SilentResultWarnReadDTO dto) throws GeneralSimpleException;

    /**
     * 保存更新结果数据
     * @param silentResultBean 任务结果
     * @param detailBeanList 结果详情
     */
    void saveAndDetail(SilentResultBean silentResultBean, List<SilentResultDetailBean> detailBeanList);

    /**
     * 统计待处理违章数
     */
    void countPendingViolationHandling();

    /**
     * 下载FTP图片
     * @param type 1原图，2结果图
     * @param resultId 结果ID
     * @param response 返回
     */
    void downloadPicByFtp(String type, String resultId, HttpServletResponse response);

    /**
     * 根据工程信息统计当天的告警信息
     * @param workIdList 工程ID
     * @return 告警信息
     */
    List<AlarmInfoVO> countAlarmInfoTodayByWorkIdInAndHandleTimeBetween(List<String> workIdList, LocalDateTime startDate, LocalDateTime endDate);

    /**
     * 更新结果信息，抓图失败
     */
    void updateBaseInfoByError();
}
